6
תגובות

PHP Sessions and Cookies

פתח ublanktext ,
שלום אלכס, בהסברך על עוגיות אתה הסברת שכאשר דפדפן ניגש בפעם הראשונה לשרת השרת מבקש ל"להדביק" על הדפדפן מדבקה(אני הבנתי שזה נכון לגבי sessions בנוסף ל phpsessid) האם זה קורה בכל מקרה (גם בלי הפעלת session_start()) או שרק כאשר באמת כותבים קוד כמו setcookie שמפורש על ידי המנוע ששולח דרך שרת ה HTTP את ה header המתאים לדפדפן ליצירת cookie, תודה.

6 תשובות

avatar ענה intval ב 21 ליוני 2012 #

session_start באחורי הקלעים מדביק לדפדפן מדבקה. למדבקה הזאת קוראים phpsessid.
שום דבר מעבר לזה סשנים לא מדביקים וזה קורה רק אם כתבת session_start או אם בקובץ ההגדרות php.ini יש הגדרה שאומרת session.auto_start = 1

avatar ענה ublanktext ב 21 ליוני 2012 #

תודה לך על תגובתך אלכס, אשמח אם תאשר כמה נתונים.
לפי מה שהבנתי ה phpsessid נשמר כ cookie או כמשתנה מסוג GET תלוי בהגדרת session.use_only_cookies.

ה - phpsessid בין אם הוא מועבר ב GET או ב cookie נעלם ברגע שסוגרים את הדפדפן או בצורה אוטומטית נמחק מהתיקייה הזמנית בשרת תוך 25 דקות תלוי ב session.gc_maxlifetime.

לגבי cookies אני מבין שלא נוצר שום cookie עם phpsessid או כל מזהה אחר, אלא רק כאשר אנו יוצרים באמצעות הפקודה setcookie שמעובדת על ידי מנוע PHP שמעביר פקודה לשרת ה HTTP בדרך כלל (apache) שמעביר http header מתאים עם המפתח והערך שהגדרנו (כמובן בנוסף להגדרות הנוספות), ושוב תודה, בברכת המשך ערב נעים.

avatar ענה intval ב 21 ליוני 2012 #

הכל נכון, חוץ מזה שהפקודה session_start אוטומטית מפעילה את setcookie בלי שאתה עצמך תכתוב משהו. בנוסף, להעביר את מזהה הסשן (phpsessid) בכתובת זה בעיית אבטחה. אחד הפוסטים האחרונים דיבר בדיוק על זה.

avatar ענה ublanktext ב 22 ליוני 2012 #

תודה לך אלכס, ברשותך יש לי שאלה אחרונה בנושא,
כאשר סשן נוצר,
השרת מקבל את המזהה לפרק זמן מסוים שהוגדר,
אבל בכדי שיהיה אינטראקציה בין הדפדפן לשרת הדפדפן גם הוא צריך להחזיק את המזהה, השאלה שלי היא לכמה זמן (בלי לצאת מהדפדפן) הדפדפן עצמו מוחק את ה cookie עם המזהה, איך הדפדפן קובע את הזמן (בהתאם לשרת) ואם כן אז האם זה תקף גם למזהה שנשמר במשתנה GET (הדפדפן שומר אותו בזיכרון השרת "שלו" בהתאם למה שהוגדר בשרת האתר אליו גלשנו), האם התאוריה שהוא שומר את המזהה לפרק זמן בהתאם לשרת כוללת את רק את השמירה באמצעות cookie או גם GET שוב תודה ושבוע טוב.

avatar ענה iiddaannyy ב 22 ליוני 2012 #

הדפדפן מחזיק את הקוקי המזהה עד שיוצאים מהדפדפן. אחרת - הוא לא ימחוק אותו (אלא אם קבענו אחרת).
השרת לעומת זאת, מוחק את המזהה ששמור אצלו לאחר X זמן ללא תגובה מהדפדפן (הזמן שנקבע ב-session.gc_maxlifetime).


כך שאם יצאנו מהדפדפן והשרת עוד לא מחק אצלו את המזהה (כי עדיין לא עבר x זמן שהגדרנו), בפעם הבאה שהדפדפן ישלח לשרת בקשה, השרת יראה שאין לדפדפן מזהה וידביק לו מדבקה חדשה.

במקרה אחר, בו השרת מחק את המזהה לפני שיצאנו מהדפדפן (כלומר עבר כבר x זמן שהגדרנו בלי בקשה מהדפדפן):
הדפדפן שולח בקשה לשרת, השרת רואה שיש לדפדפן מזהה והוא משווה את המזהה של הדפדפן עם שאר המזהים ששמורים אצלו, בשרת. הוא מגלה שאין כזה מזהה אצלו, אז הוא מדביק לדפדפן מדבקה (מזהה) חדשה.

avatar ענה ublanktext ב 22 ליוני 2012 #

תודה לך עידן, תודה אלכס, תודה לכם על התשובות המצוינות, המשך שבוע נעים.